package com.zjsru.plan2024.codeBase.fifty;

/**
 * 459. 重复的子字符串
 * @Author: cookLee
 * @Date: 2024-06-23
 */
public class RepeatedSubstringPattern {

    /**
     * 主
     * \
     * 输入: s = "abab"
     * 输出: true
     * 解释: 可由子串 "ab" 重复两次构成。
     * \
     * 输入: s = "aba"
     * 输出: false
     * \
     * 输入: s = "abcabcabcabc"
     * 输出: true
     * 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
     * \
     * @param args args
     */
    public static void main(String[] args) {
        RepeatedSubstringPattern  repeatedSubstringPattern= new RepeatedSubstringPattern();
        String s = "abab";
        System.out.println(repeatedSubstringPattern.repeatedSubstringPattern(s));
    }

    /**
     * 重复子串模式
     *
     * @param s s
     * @return boolean
     */
    public boolean repeatedSubstringPattern(String s) {
        int len = s.length();
        //重复字符串，不包含单个位数，且长度必然是小于原字符串的二分之一
        for (int i = 1; i * 2 <= len; i++) {
            //子字符串是否能组成完整的字符串s
            if (len % i == 0) {
                //定义是否是子字符串
                boolean match = true;
                //双指针开始按位数匹配
                for (int j = i; j < len; j++) {
                    if (s.charAt(j) != s.charAt(j - i)) {
                        match = false;
                        break;
                    }
                }
                if (match) {
                    return true;
                }
            }
        }
        return false;
    }

}
